package com.mokairui.share_model__routines.squential_control.fixed_sequence;

import lombok.extern.slf4j.Slf4j;

import java.util.concurrent.locks.LockSupport;

/**
 * @Description 固定顺序执行 park 版本
 * @Author Mokairui
 * @Since 2021/10/4
 */
@Slf4j(topic = "c.fixedSequence")
public class FixedSequencePark {
    public static void main(String[] args) {
        Thread t1 = new Thread(() -> {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            // 当没有 [许可] 时, 当前线程暂停运行; 有 [许可] 时, 用掉 [许可] ,当前线程恢复执行
            LockSupport.park();
            log.debug("t1线程执行了...");
        });

        Thread t2 = new Thread(() -> {
            // 给线程 t1 发放 [许可] (多次调用只能发放一次)
            LockSupport.unpark(t1);
            log.debug("t2线程执行了...");
        });

        t1.start();
        t2.start();
    }
}
